// 这个文件模块用于管理 拦截器 以及 get和post方法
import axios from "axios";
//引入封装好的路由文件
import router from "../router";
import store from "../store";
//引入原生node的字符串查询方法
import qsString from 'querystring'

let baseUrl = '/api'
//重新创建一个实例
const http = axios.create({
  baseURL: "/api",
});
//创建请求拦截器
http.interceptors.request.use((req) => {
   console.log(req,'请求');
 
  // 因为登录不需要验证token所以可以剔除登录判断
  if(req.url!='/userlogin'){
     //这里设置请求头
   req.headers.authorization = store.getters.getUserInfo.token;
  }else{
    return req
  }

  return req
  
  
});
//响应拦截
http.interceptors.response.use((res) => {
  // 全局拦截错误！！！
  //   注意点： 正常工作还是要以code为区分。因为正常的后端会以不同的code值代表不同的全局错误
  if (res.data.msg == "请设置请求头,并携带验证字符串") {
    alert(res.data.msg);
    //跳转到登录页
    router.push("/login");
  } else if (res.data.msg == "登录已过期或访问权限受限") {
    alert(res.data.msg);
    //跳转到登录页
    router.push("/login");
  } else {
    return res.data;
  }
});

/* 
独立封装get 方法
Params ===== url  指调取的接口地址
Params ===== params 参数
*/
export const get = (url,params={}) => {
  return new Promise((resolve, reject) => {
    axios
      .get(baseUrl+url,{
        params
      })
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        reject(err);
      });
  });
};

/* 
独立封装post  方法
Params ===== url  指调取的接口地址
Params ===== params 参数
Params ===== isFile 是否含有文件
*/

export const post = (url,params={},isFile=false)=>{
  console.log(isFile);
  let data = null
  //有文件的传参逻辑
  if(isFile){
    data = new FormData()
    for(let i in params){
      data.append(i,params[i])
    }
  }else{
    data = qsString.stringify(params)
  }
  return new Promise((resolve,reject)=>{
    axios.post(baseUrl+url,data)
    .then(res=>{
      resolve(res)
    })
    .catch(err=>{
      reject(err)
    })
  })
}
export default http;
